import time

import requests
import pytest

from api.reg_login_api import RegLoginApi
from common.utils import common_assert, clear_user_info, read_json


class TestRegLogin(object):

    def setup_class(self):
        #调用封装的用户信息初始化的方法
        clear_user_info()

    def setup(self):
        # 1.创建session对象
        ses = requests.session()
        # 2.实例化封装接口请求的类，获取类的对象
        self.reg_login_api = RegLoginApi(ses)

    @pytest.mark.parametrize("r,exp_status_code",read_json("reg_login_data","img_verify_code"))
    # 获取图片验证码测试用例
    def test01_img_verify_code(self,r,exp_status_code):
        # 3.调用实例化类的对象，获取封装注册图片验证码接口请求的方法，拿到该接口的响应数据
        resp = self.reg_login_api.get_img_verify_code(r)
        # 4.断言
        assert exp_status_code == resp.status_code
    @pytest.mark.parametrize("mobile,img_verify_code,exp_status,exp_desc",read_json("reg_login_data","phone_verify_code"))
    # 获取短信验证码测试用例
    def test02_phone_verify_code(self,mobile,img_verify_code,exp_status,exp_desc):
        # 3.调用实例化类的对象，实现获取注册图片验证码接口请求
        self.reg_login_api.get_img_verify_code(0.123332123123)
        # 4.调用实例化类的对象，实现获取注册短信验证码接口请求，拿到该接口的响应数据
        resp = self.reg_login_api.get_phone_verify_code(mobile,img_verify_code)
        common_assert(resp,exp_status,exp_desc)

    @pytest.mark.parametrize("form_dict,exp_status,exp_desc", read_json("reg_login_data","user_register"))
    # 注册测试用例
    def test03_register(self,form_dict,exp_status,exp_desc):
        # 1.实现获取注册图片验证码接口
        self.reg_login_api.get_img_verify_code(0.123332123123)
        # 2.实现获取注册短信验证码接口
        self.reg_login_api.get_phone_verify_code(form_dict.get("phone"), "8888")
        # 3.调用封装注册接口请求的方法，获取响应数据
        resp = self.reg_login_api.user_register(form_dict)
        # 4.断言
        common_assert(resp,exp_status,exp_desc)

    @pytest.mark.parametrize("mobile,pswd,exp_status,exp_desc",read_json("reg_login_data","user_login"))
    # 登录测试用例
    def test04_user_login(self,mobile,pswd,exp_status,exp_desc):
        # 1.调用封装登录接口请求的方法，获取响应数据
        resp = self.reg_login_api.user_login(mobile,pswd)
        # 2.断言
        common_assert(resp, exp_status, exp_desc)
    @pytest.mark.skip
    #登录错误密码校验-测试用例
    def test05_user_login_error_pwd_check(self):
        #1、登录密码错误1次
        resp_1 = self.reg_login_api.user_login("18743264322","123456")
        #断言
        common_assert(resp_1,100,"密码错误1次")
        #2、登录密码错误2次
        resp_2 = self.reg_login_api.user_login("18743264322", "123456")
        # 断言
        common_assert(resp_2, 100, "密码错误2次")
        #3、登录密码错误3次
        resp_3 = self.reg_login_api.user_login("18743264322", "123456")
        # 断言
        common_assert(resp_3, 100, "账号已被锁定")
        #4、等待60s
        time.sleep(60)
        #5、登录密码正确，登录成功
        resp_4 = self.reg_login_api.user_login("18743264322", "qqq123")
        # 断言
        common_assert(resp_4, 200, "成功")